/**
 * Vuex适用于单页面多层组件之间的传参，但是当页面刷新（包括路由跳转以后）会重置store中的数据。
 */
import {createStore} from 'vuex'

const store  = createStore({
    state:{//store中的全局数据（存值必须使用mutations中的方法，取值通过this.$store.state.count取）
        loginUser: {
            id: null,
            photo: null,
            empName: null,
            dept: null,
            position: null
        },
        routes:[],
        menuOptions: [],//权限菜单选项
        companyOptions:[],//公司选项
        dictTypes: [],
        menuIcons: [],//菜单图标集
        proClassify: [],//流程类别选项
        positionOptions: [],//岗位选项集合
        userContactsGroup: [],//用户联系人群组
        organizationContacts: [],//组织联系人
        userGroupContacts: [],//用户群组联系人
        organization: [],//组织架构
        gsTypeOptions: [],//物品类别选项
        gsList: [],//物品集合
        dictOptions: [],
    },
    actions:{//用于处理异步方法，调用mutations的方法
        // aupdateInfo(context,payload){
        // }
    },
    mutations:{//mutations中的方法必须是一个同步方法
        setDictOptions(state,options){
            state.dictOptions = options;
        },
        setGsList(state,gsList){
            state.gsList = gsList;
        },
        setGsTypeOptions(state,gsTypeOptions){
            state.gsTypeOptions = gsTypeOptions;
        },
        setOrganization(state,organization){
            state.organization = organization;
        },
        setUserContactsGroup(state,userContactsGroup){
            state.userContactsGroup = userContactsGroup;
        },
        setOrganizationContacts(state,organizationContacts){
            state.organizationContacts = organizationContacts;
        },
        setUserGroupContacts(state,userGroupContacts){
            state.userGroupContacts = userGroupContacts;
        },
        setPositionOptions(state,positionOptions){
            state.positionOptions = positionOptions;
        },
        setProClassify(state,proClassify){
            state.proClassify = proClassify;
        },
        setCompanyOptions(state,companyOptions){
            state.companyOptions = companyOptions;
        },
        setMenuIcons(state,menuIcons){
            state.menuIcons = menuIcons;
        },
        setDictTypes(state,dictTypes){
            state.dictTypes = dictTypes;
        },
        setLoginUser(state,user){
            state.loginUser = user;
        },
        setMenuOptions(state,menuOptions){
            state.menuOptions = menuOptions;
        },
        initRoutes(state,data){
            state.routes = data;
        },
        incrementCount(state,num){//这里的第二个参数就是用户传过来的参数，称为载荷(Payload)。可以是一个变量，也可以是一个对象，用于传递多个参数。
            state.counter += num;
        },
        loginUserInfoSwitch(state){
            state.loginUser = {
                photo: null,
                empName: null,
                dept: null,
                position: null
            }
            state.menuOptions = [];
            state.routes = []
        }
    },
    getters:{//作用与计算属性相同，用于返回经过某种处理后的数据
        // dictValuesByClassifyId: (state) => async (id) => {
        //     let result = null;
        //     await getDictValuesByClassifyId(id).then(data=>{
        //         result = data.data;
        //     })
        //     return result;
        // },
        // powerCounter(state){
        //     return state.counter * state.counter;
        // },
        powerCounter2(state,getters){//注意第二个参数值指的就是getters，与命名无关。
            return getters.powerCounter +1;
        }
    },
    modules:{//用于模块化的管理state数据，这个模型中的数据最终还是会加入到上面的根的state中。
        // a:moduleA
    }
})
export default store;

